import { read, utils } from "xlsx";
import XLSXStyle from 'xlsx-js-style';



/**
 * Returns the sum of a and b
 * @param {instructions}  //导入须知 []
 * @param {tableHeader} //表头 []
 * @param {colsList} //表头单元格宽度 []
 * @param {tableName} //表名 ""
 * 
 * @param {dataRows} //[]map数据，没有深度嵌套
 * @param {positionObj} // positionObj:{start_x:起始行数,start_y:起始列数,end_x:结束行数,end_y:结束列数}
 **/
// colsist = [ //设置表格的宽度
//     {
//         wpx: 50, //序号
//     },
//     {
//         wpx: 100, //姓名
//     },
//     {
//         wpx: 50, //性别
//     },
//     {
//         wpx: 100, //密码
//     },
//     {
//         wpx: 100, //电话
//     },
//     {
//         wpx: 100, //权限
//     },
//     {
//         wpx: 100, //所属部门
//     },
//     {
//         wpx: 100,//邮箱
//     },
//     {
//         wpx: 150, //简介
//     }

// ];
export const downloadTemplateUser = (instructions, tableHeader, colsList, tableName, positionObj = { start_r: 0, start_c: 0, end_r: 0, end_c: 8 }) =>
{
    console.log(instructions, tableHeader, colsList, tableName);
    // 创建一个新的工作簿和工作表
    const wb = XLSXStyle.utils.book_new();

    // 示例导入说明
    const ws = XLSXStyle.utils.aoa_to_sheet([
        instructions,
        tableHeader
    ]);
    formatTable(ws)
    ws["A1"].s = {
        alignment: {//对齐方式
            vertical: 'center',//竖直居中
            wrapText: true,//自动换行
        },
        font: {
            name: '宋体',
            sz: 10,
            color: { rgb: "EE4C0C" },
            bold: true,
            italic: false,
            underline: false
        },

        fill: {
            fgColor: { rgb: "FFFFFF" },
        }
    }
    ws['!cols'] = colsList;

    ws['!rows'] = [{ hpx: 100 }];

    // 合并单元格
    ws["!merges"] = [{ s: { r: positionObj.start_r, c: positionObj.start_c }, e: { r: positionObj.end_r, c: positionObj.end_c } }];
    // 将工作表添加到工作簿
    XLSXStyle.utils.book_append_sheet(wb, ws, "Sheet1");

    // 将工作簿保存为文件
    XLSXStyle.writeFile(wb, `${tableName}.xlsx`);
}

export const downloadUserData = (tableHeader, titleRow, dataRows, colsList, tableName, positionObj = { start_r: 0, start_c: 0, end_r: 0, end_c: 9 }, titleHeight = 60, headerHeight = 50, rowsHeight = 40) =>
{
    // 创建一个新的工作簿和工作表
    const wb = XLSXStyle.utils.book_new();
    let titleRows = [`${titleRow}`];
    let userListDataWithHeader = [tableHeader].concat(dataRows);
    const parseTable = [titleRows].concat(userListDataWithHeader)
    const ws = XLSXStyle.utils.aoa_to_sheet(parseTable);
    ws['!cols'] = colsList
    // 设置表格的高度
    let rows = [];
    rows.push({ hpx: `${titleHeight}` });  // 第一行高度设置为80  
    rows.push({ hpx: `${headerHeight}` });   // 第二行高度设置为60  
    let numRows = Object.keys(ws).length
    for (let i = 2; i < numRows; i++) {   // numRows 为你的总行数  
        rows.push({ hpx: `${rowsHeight}` });  // 以后的所有行高度设置为50  
    }
    ws['!rows'] = rows;
    formatTable(ws)
    ws["A1"].s = {
        alignment: {//对齐方式
            horizontal: 'center',// 水平居中
            vertical: 'center',//竖直居中
            wrapText: true,//自动换行
        },
        font: {
            name: '宋体',
            sz: 16,
            bold: true,
            italic: false,
            underline: false
        },

        fill: {
            fgColor: { rgb: "FFFFFF" },
        }
    }
    // 合并单元格
    ws["!merges"] = [{ s: { r: positionObj.start_r, c: positionObj.start_c }, e: { r: positionObj.end_r, c: positionObj.end_c } }];
    // 将工作表添加到工作簿
    XLSXStyle.utils.book_append_sheet(wb, ws, "Sheet1");
    // 将工作簿保存为文件
    XLSXStyle.writeFile(wb, `${tableName}.xlsx`);
}
//解析excel
export const analysisExcel = async (file) =>
{
    return new Promise((resolve, reject) =>
    {
        const reader = new FileReader();
        reader.onload = function (e)
        {
            const data = e.target.result;
            const workbook = read(data, { type: "binary" });
            const result = {
                headers: [],
                tableData: []
            };
            workbook.SheetNames.forEach((sheetName) =>
            {
                const worksheet = workbook.Sheets[sheetName];
                const headerRow = utils.sheet_to_json(worksheet, { header: 1 });

                result.headers = headerRow[1]
                const values = utils.sheet_to_json(worksheet, { header: 1, raw: true });
                result.tableData.push(...values);
            });
            // 去除第一第二个元素
            result.tableData.splice(0, 2);
            resolve(result);
        };
        reader.readAsBinaryString(file);
    });
};
// 格式化单元格
const formatTable = (ws) =>
{
    Object.keys(ws).forEach((key) =>
    {//这里遍历单元格给单元格对象设置属性,s为控制样式的属性
        if (key.indexOf('!') < 0) {
            ws[key].s = {
                alignment: {//对齐方式
                    horizontal: 'center',// 水平居中
                    vertical: 'center',//竖直居中
                    wrapText: true,//自动换行
                },
                font: {
                    name: '宋体',
                    sz: 10,
                    color: { rgb: "3C3E3F" },
                    italic: false,
                    underline: false
                },
                border: {
                    top: { style: "thin" },
                    bottom: { style: "thin" },
                    left: { style: "thin" },
                    right: { style: "thin" }
                },
                fill: {
                    fgColor: { rgb: "FFFFFF" },
                },
            }
        }
    })
}